package com.chaos.framework.starter.helper;


import cn.hutool.core.util.ObjectUtil;
import com.chaos.framework.model.dto.DTO;
import com.chaos.framework.model.dto.ID;
import com.chaos.framework.model.dto.result.Result;
import com.chaos.framework.model.dto.result.data.DataResult;
import com.chaos.framework.model.exception.BusinessException;
import org.apache.commons.lang3.StringUtils;

import java.util.Objects;

public class CheckHelper {
    private CheckHelper() {
    }

    public static void requireTrue(boolean expression, String errMsg) {
        if (!expression) {
            throwException(errMsg);
        }
    }

    public static void requireFalse(boolean expression, String errMsg) {
        requireTrue(!expression, errMsg);
    }

    public static void requireNotNull(Object obj, String errMsg) {
        requireTrue(Objects.nonNull(obj), errMsg);
    }

    public static void requireNotNull(DataResult<ID> r, String errMsg) {
        requireTrue(Objects.nonNull(r), errMsg);
        requireTrue(Objects.nonNull(r.getData()), errMsg);
        requireTrue(Objects.nonNull(r.getData().getId()), errMsg);
    }


    public static void requireNull(Object obj, String errMsg) {
        requireTrue(Objects.isNull(obj), errMsg);
    }

    public static void requireNotBlank(String str, String errMsg) {
        requireTrue(StringUtils.isNotBlank(str), errMsg);
    }

    public static void requireNotEmpty(Object object, String errMsg) {
        requireTrue(ObjectUtil.isNotEmpty(object), errMsg);
    }

    public static void requireEquals(Object a, Object b, String errMsg) {
        requireTrue(Objects.equals(a, b), errMsg);
    }

    public static void requireDeepEquals(Object a, Object b, String errMsg) {
        requireTrue(Objects.deepEquals(a, b), errMsg);
    }

    public static <T> void requireSuccess(Result r) {
        requireTrue(r.isSuccess(), r.getMsg());
    }

    public static <T> void requireSuccess(Result r, String errMsg) {
        requireTrue(r.isSuccess(), errMsg);
    }

    public static void throwException(String errMsg) {
        throw new BusinessException(errMsg);
    }
}
